Hi, You should initialize AVCodecContext, open it and then you can fill AVStream::codecpar with avcodec_parameters_from_context function. Please look at doc/examples/muxing.c for sample code.
Yurii ср, 23 марта 2022 г. в 14:07, Gustav González <xting...@gmail.com>: > Hi, > > A long time ago, I implemented a C++ class to create MP4 video files from > an array of images. The code works pretty well, nevertheless, I discovered > a deprecation warning that I want to rid off. The parameter "*codec*" > from the *AVStream* structure has been deprecated and I want to replace > it. > > Here is my current working code: > > AVOutputFormat *outputFormat = av_guess_format("ffh264", > movieFile.toLocal8Bit().data(), nullptr); > if (!outputFormat) > return false; > > enum AVCodecID videoCodecID = outputFormat->video_codec; > > AVCodec *videoCodec = avcodec_find_encoder(videoCodecID); > if (!videoCodec) > return false; > > AVStream *stream = avformat_new_stream(formatContext, videoCodec); > if (!stream) > return false; > > AVCodecContext *videoCodecContext = stream->codec; // <- codec is a > deprecated parameter > > videoCodecContext->width = videoW; > videoCodecContext->height = videoH; > > Now, to replace the "*codec*" parameter, it is recommended to use the > parameter "*codecpar*" (*AVCodecParameters*) that was included in the > AVStream structure. The usual way is this: > > if (avcodec_parameters_to_context(videoCodecContext, stream->codecpar) < 0) > return nullptr; > > Unfortunately, when I try to use that code, I got this problem: usually, > all the information stored in the *codecpar* parameter comes from the > data structure from a previous video file that was opened previously. In > other words, the information already exists. In my case, the situation is > different because I am creating an MP4 file from scratch so there is no > previous *codecpar* record to use, therefore I have to create a new > instance of AVCodecParameters structure by myself, setting every variable > manually. > > As far, I was able to set all the variables from the *codecpar* > structure, except for two: > > uint8_t * extradata > int extradata_size > > Note: currently I can create an MP4 file "successfully" without setting > those variables, but the file is incomplete and when I try to play it using > "mplayer" I got this error message: > > [extract_extradata @ 0x55b5bb7e45c0] No start code is found. > > I was researching these two fields, and it seems they store some kind of > information related to the codec, which in my case is H264. > > So, my specific question is: if I am setting a *codecpar* variable ( > *AVCodecParameters*) from scratch, how can I set values for the fields > *extradata* and *extradata_size* in the right way for the codec H264? > Thanks, > -- > Gustav Gonzalez > xting...@gmail.com > > _______________________________________________ > Libav-user mailing list > Libav-user@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/libav-user > > To unsubscribe, visit link above, or email > libav-user-requ...@ffmpeg.org with subject "unsubscribe". >
_______________________________________________ Libav-user mailing list Libav-user@ffmpeg.org https://ffmpeg.org/mailman/listinfo/libav-user To unsubscribe, visit link above, or email libav-user-requ...@ffmpeg.org with subject "unsubscribe".