aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-10-07 18:15:25 +0200
committerMichael Niedermayer <michaelni@gmx.at>2013-10-12 01:42:53 +0200
commit713dcdbfcbaa305050ae6362e5131e0e2e705135 (patch)
tree5ab228a9cb06d479327924770f886c89fbb82bd7
parentce994a03f5e233a0fd2136ab589cecdacc02aa77 (diff)
downloadffmpeg-713dcdbfcbaa305050ae6362e5131e0e2e705135.tar.gz
avformat/movenc: set pretty compressor name for XDCAM
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavformat/movenc.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index f3058bdc10..1e3c282494 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -1076,6 +1076,32 @@ static int mov_write_pasp_tag(AVIOContext *pb, MOVTrack *track)
return 16;
}
+static void find_compressor(char * compressor_name, int len, MOVTrack *track)
+{
+ int xdcam_res = (track->enc->width == 1280 && track->enc->height == 720)
+ || (track->enc->width == 1440 && track->enc->height == 1080)
+ || (track->enc->width == 1920 && track->enc->height == 1080);
+
+ if (track->mode == MODE_MOV && track->enc->codec && track->enc->codec->name) {
+ av_strlcpy(compressor_name, track->enc->codec->name, 32);
+ } else if (track->enc->codec_id == AV_CODEC_ID_MPEG2VIDEO && xdcam_res) {
+ int interlaced = track->enc->field_order > AV_FIELD_PROGRESSIVE;
+ AVStream *st = track->st;
+ int rate = av_q2d(find_fps(NULL, st));
+ av_strlcatf(compressor_name, len, "XDCAM");
+ if (track->enc->pix_fmt == AV_PIX_FMT_YUV422P) {
+ av_strlcatf(compressor_name, len, " HD422");
+ } else if(track->enc->width == 1440) {
+ av_strlcatf(compressor_name, len, " HD");
+ } else
+ av_strlcatf(compressor_name, len, " EX");
+
+ av_strlcatf(compressor_name, len, " %d%c", track->enc->height, interlaced ? 'i' : 'p');
+
+ av_strlcatf(compressor_name, len, "%d", rate * (interlaced + 1));
+ }
+}
+
static int mov_write_video_tag(AVIOContext *pb, MOVTrack *track)
{
int64_t pos = avio_tell(pb);
@@ -1111,8 +1137,7 @@ static int mov_write_video_tag(AVIOContext *pb, MOVTrack *track)
avio_wb16(pb, 1); /* Frame count (= 1) */
/* FIXME not sure, ISO 14496-1 draft where it shall be set to 0 */
- if (track->mode == MODE_MOV && track->enc->codec && track->enc->codec->name)
- av_strlcpy(compressor_name, track->enc->codec->name, 32);
+ find_compressor(compressor_name, 32, track);
avio_w8(pb, strlen(compressor_name));
avio_write(pb, compressor_name, 31);