2016-10-06 20 views
1

적절한 AVCodec에 대한 포인터를 수신하는 데 사용할 수있는 매개 변수 지정 (11.7, 윈도우, i686으로는, GPL은 libav) libav의 av_find_best_stream 기능에 대한 문서 :디코더 반환 av_find_best_stream 대 avcodec_find_decoder

decoder_ret을 - NULL이 아닌 경우, ID를 주어진 AVCodec를 찾을 수 avcodec_find_decoder 기능도있다 선택된 스트림

위한 디코더를 반환한다.

그러나, 공식 demuxing + decoding example는 스트림을 찾을 av_find_best_stream를 사용하지만, av_find_best_stream의 코덱 반환 매개 변수 대신 코덱 찾기 위해 avcodec_find_decoder을 사용하도록 선택 :

: 같은 반대로

ret = av_find_best_stream(fmt_ctx, type, -1, -1, NULL, 0); 
... 
stream_index = ret; 
st = fmt_ctx->streams[stream_index]; 
... 
/* find decoder for the stream */ 
dec = avcodec_find_decoder(st->codecpar->codec_id); 

ret = av_find_best_stream(fmt_ctx, type, -1, -1, &dec, 0); 

제 질문은 av_find_best_stream의 반환 매개 변수 대 avcodec_find_decoder을 사용하는 것의 차이점은입니다?

내가보기에는 예제가 좀 더 편리한 반환 매개 변수가 아닌 avcodec_find_decoder을 사용하기로 선택했기 때문에 그 이유가 구체적 이유인지 여부를 알 수 없습니다. 문서 자체는 약간 얼룩덜룩하고 분리되어 있으므로 이와 같은 것이 중요한 이유 때문에 수행되는지 여부를 알기는 어렵습니다. 나는 그 예가 그러한 방식으로 "해야"함을 암시하는지, 아니면 예를 든 저자가 좀 더 임의적 인 개인적인 이유로 그것을 행했는지를 말할 수 없다.

답변

1

av_find_best_stream은 코드 샘플과 거의 같은 방식으로 avcodec_find_decoder을 내부적으로 사용합니다. 그러나 디코더가 요청 될 때 av_find_best_stream 동작이 변경됩니다. 즉, 각 후보 스트림에서 avcodec_find_decoder을 사용하려고 시도하고 실패하면 후보를 무시하고 다음 후보로 이동합니다. 결국 그것은 디코더와 함께 최상의 스트림을 반환합니다. 디코더가 요청되지 않으면 디코딩 할 수 있는지 여부를 확인하지 않고 최상의 스트림 만 반환합니다.

단일 비디오/오디오 스트림을 얻고 자한다면 사용자 정의 스트림 선택 로직을 작성하지 않을 것이고 av_find_best_stream을 사용하여 디코더를 얻는 것은 단점이 없다고 말할 수 있습니다.