티스토리 뷰

C++

C++/FFmpeg av_err2str() C4576 error

developer0hye 2022. 6. 4. 00:34

C++ 프로젝트에서 매크로인 av_err2str() 를 사용하면 컴파일시 C4576 error가 반환될 수 있다.

 

C++ 컴파일러로 C 코드를 컴파일 하려다보니 문법이 맞지 않아 발생하는 에러다.

 

av_err2str() 은 아래와 같이 구현돼있다.

 

#define av_err2str(errnum) \
    av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum)

 

(char[]){0} 이게 C에서는 컴파일 되는데 C++ 컴파일러로는 컴파일이 안되나보다.

 

 

기존 코드가 아래처럼 되어 있다면,

int response = avcodec_send_packet(pCodecContext, pPacket);

  if (response < 0) {
    logging("Error while sending a packet to the decoder: %s", av_err2str(response));
    return response;
  }

 

아래 처럼 수정해주면 된다. 

  int response = avcodec_send_packet(pCodecContext, pPacket);

  if (response < 0) {
    char errorStr[AV_ERROR_MAX_STRING_SIZE] = {0};
    av_make_error_string(errorStr, AV_ERROR_MAX_STRING_SIZE, response);
    std::cout << "Error while sending a packet to the decoder: " << errorStr << std::endl;
    return response;
  }

 

logging 이랑 std::cout은 제쳐두고 errorStr을 명시적으로 쓴부분만 짚고 넘어가면 된다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함